package entidades;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import entidades.Carta.Naipe;
import entidades.Carta.Valor;

public final class Baralho {

	private List<Carta> cartas;
	private static Baralho instance = null;

	public Baralho() {
		cartas = new ArrayList<Carta>();
		for (Naipe naipe : Naipe.values()) {
			for (Valor valor : Valor.values()) {
				cartas.add(new Carta(valor, naipe));
			}
		}
	}

	/**
	 * Metodo que pega o baralho.
	 * 
	 * @return o baralho.
	 */
	public List<Carta> getBaralho() {
		return cartas;
	}

	/**
	 * Metodo que embaralha as cartas do baralho.
	 */
	public void embaralha() {
		Collections.shuffle(cartas);
	}

	/**
	 * Metodo que reinicia o baralho.
	 */
	public void recolherBaralho() {
		this.cartas = new ArrayList<Carta>();
		for (Naipe naipe : Naipe.values()) {
			for (Valor valor : Valor.values()) {
				cartas.add(new Carta(valor, naipe));
			}
		}
	}

	/**
	 * Metodo que instancia o baralho.
	 * 
	 * @return o baralho
	 */
	public static Baralho getInstance() {
		if (instance == null) {
			instance = new Baralho();
		}
		return instance;
	}

	/**
	 * Metodo que pega as cartas
	 * 
	 * @return lista de cartas
	 */
	public List<Carta> getCartas() {
		return cartas;
	}

	/**
	 * Metodo que pega a proxima carta do baralho.
	 * 
	 * @return a primeira carta.
	 */
	public Carta getProximaCarta() {
		return cartas.get(0);
	}

	/**
	 * Metodo que remove a carta do baralho.
	 * 
	 * @return carta a ser removida.
	 */
	public Carta removeCartaBaralho() {
		Carta cartaRemovida = cartas.remove(cartas.size() - 1);
		return cartaRemovida;
	}
}